/*
 *
 *  * Copyright 2012-2015 Viant.
 *  *
 *  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 *  * use this file except in compliance with the License. You may obtain a copy of
 *  * the License at
 *  *
 *  * http://www.apache.org/licenses/LICENSE-2.0
 *  *
 *  * Unless required by applicable law or agreed to in writing, software
 *  * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 *  * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 *  * License for the specific language governing permissions and limitations under
 *  * the License.
 *
 */

package com.sm.store;

public class FnvHashFunction {

    private static final long FNV_BASIS = 0x811c9dc5;
    private static final long FNV_PRIME = (1 << 24) + 0x193;

    public static int hash(int key) {
        long hash = FNV_BASIS;
        for(int i = 0; i < 4; i++) {
            hash ^= 0xFF & key << (8*i);
            hash *= FNV_PRIME;
        }

        return (int) hash;
    }

    public static int hash(long key) {
        long hash = FNV_BASIS;
        for(int i = 0; i < 8; i++) {
            hash ^= 0xFF & key << (8*i);
            hash *= FNV_PRIME;
        }
        return (int) hash;
    }


    public static void main(String[] args) {
        for ( int i=1 ; i < 20 ; i++ ) {
            System.out.println("i "+i+" hash "+hash(i));
        }
    }

}
